package com.clarence.dada.modular.system.menu.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.clarence.dada.modular.system.menu.entity.SysMenuEntity;
import com.clarence.dada.modular.system.menu.entity.req.SysMenuReq;
import com.clarence.dada.modular.system.menu.entity.resp.SysMenuDropDownTreeResp;
import com.clarence.dada.modular.system.menu.entity.resp.SysMenuResp;
import com.clarence.dada.modular.system.menu.entity.resp.SysMenuTreeResp;

import java.util.List;

/**
 * 系统菜单service接口
 *
 * @author GD
 * @since 2020/3/13 16:05
 */
public interface SysMenuService extends IService<SysMenuEntity> {

    /**
     * 添加系统菜单
     *
     * @param req 添加参数
     * @author GD
     * @since 2020/3/27 9:03
     */
    void menuAdd(SysMenuReq req);

    /**
     * 编辑系统菜单
     *
     * @param req 编辑参数
     * @author GD
     * @since 2020/3/27 9:03
     */
    void menuEdit(SysMenuReq req);

    /**
     * 查看系统菜单
     *
     * @param req 查看参数
     * @return 系统菜单
     * @author GD
     * @since 2020/3/27 9:03
     */
    SysMenuResp menuDetail(SysMenuReq req);

    /**
     * 删除系统菜单
     *
     * @param req 删除参数
     * @author GD
     * @since 2020/3/27 9:03
     */
    void menuDelete(SysMenuReq req);

    /**
     * 根据应用编码判断该机构下是否有状态为正常的菜单
     *
     * @param appCode 应用编码
     * @return 该应用下是否有正常菜单，true是，false否
     * @author GD
     * @since 2020/11/24 21:37
     */
    boolean hasMenu(String appCode);
//
//    /**
//     * 系统菜单列表，树形结构，用于菜单管理界面的列表展示
//     *
//     * @param sysMenuVo 查询参数
//     * @return 菜单树表列表
//     * @author GD
//     * @since 2020/3/26 10:19
//     */
//    List<SysMenuEntity> findList(SysMenuVo sysMenuVo);
//
    /**
     * 获取菜单列表
     *
     * @author GD
     * @since 2021/1/6 17:10
     */
    List<SysMenuTreeResp> menuListTree(SysMenuReq req);
//
//    /**
//     * 获取菜单的树形列表（用于选择上级菜单）（layui版本）
//     *
//     * @return 菜单树
//     * @author GD
//     * @since 2021/1/6 21:47
//     */
//    List<ZTreeNode> layuiSelectParentMenuTreeList();
//
    /**
     * 获取系统菜单树，用于新增，编辑时选择上级节点（antd vue版本，用在新增和编辑菜单选择上级菜单）
     *
     * @param req 查询参数
     * @return 菜单树列表
     * @author GD
     * @since 2020/3/27 15:56
     */
    List<SysMenuDropDownTreeResp> menuDropDownTree(SysMenuReq req);
//
//    /**
//     * 获取系统所有菜单（适用于登录后获取左侧菜单）（适配antd vue版本）
//     *
//     * @return 系统所有菜单信息
//     * @author majianguo
//     * @since 2021/1/7 15:24
//     */
//    List<SysMenuTreeResp> getLeftMenuList(SysMenuReq sysMenuReq);
//
//    /**
//     * 获取包含按钮的系统菜单
//     *
//     * @param sysRoleVo 请求参数
//     * @param lateralFlag    true-不带树形结构，false-返回带树形结构的
//     * @author majianguo
//     * @since 2021/1/9 17:11
//     */
//    List<LayuiMenuAndButtonTreeResponse> getMenuAndButtonTree(SysRoleVo sysRoleVo, Boolean lateralFlag);
//
//    /**
//     * 获取当前用户的某个应用下的菜单
//     *
//     * @param appCodeList      应用编码集合
//     * @param layuiVisibleFlag layui版本查询查询条件，如果穿true，则会带上layui_visible为Y的查询条件
//     * @param antdvFrontType   前台菜单或者后台菜单的类型
//     * @author GD
//     * @since 2020/12/27 18:11
//     */
//    List<SysMenuEntity> getCurrentUserMenus(List<String> appCodeList, Integer antdvFrontType);

    /**
     * 通过菜单或按钮id的集合，获取拥有资源编码的集合
     *
     * @author fengshuonan
     * @date 2021/8/11 14:25
     */
    List<String> getResourceCodesByBusinessId(List<Long> businessIds);

}